#include "HashTable.hpp"



// void test()
// {
//     hashtable<int,int,cm> h1;
//     //cout << "hello world" << endl;
//     int a[] = {1,4,24,34,7,44,17,37,67,11,21,43,53,25,9999999,1111111,22,46,23};
//     for(auto e:a)
//     {
//         h1.insert(e);
//         // h1.print();
//         // cout << "--------------------------------------" << endl;
//     }
//     hashtable<int,int,cm> h2(h1);
//     h2.print();
//     hashtable<int,int,cm> h3;
//     h3.insert(1);
//     h3 = h1;
//     h3.print();
//     for(auto e:a)
//     {
        
//         h1.print();
//         cout << "--------------------------------------" << endl;
//         h1.erase(e);
//     }
//     // hashtable<int,int> h2(h1);
//     // h2.print();
//     // hashtable<int,int> h3;
//     // h3.insert(1);
//     // h3 = h1;
//     // h3.print();
// }

#include "MyOrderedMap.hpp"
#include "MyOrderedSet.hpp"

void test()
{
    bit::unordered_map<int,int> m1;
    int a[] = {1,4,24,34,7,44,17,37,67,11,21,43,53,25,9999999,1111111,22,46,23};
    for(auto e:a)
    {
        m1.insert(make_pair(e,e));
    }
    m1.print();

    // for(auto e:m1)
    // {
    //     cout << e.first << endl;
    // }
    m1.print();
    for(auto e:a)
    {
        m1.erase(e);
        m1.print();
        cout << "-------------------------------" << endl;
        // for(auto e:m1)
        // {
        //     cout << e.first << endl;
        // }
    }

    // bit::unordered_map<int,int>::iterator ret = m1.find(4);

    // cout << (*ret).first << endl;
}

void test1()
{
    bit::unordered_set<int> e1;
    int a[] = {1,4,24,34,7,44,17,37,67,11,21,43,53,25,9999999,1111111,22,46,23};
    for(auto e:a)
    {
        e1.insert(e);
    }

    bit::unordered_set<int>::iterator ret = e1.find(4);

    e1.print();
    for(auto e:a)
    {
        e1.erase(e);
        e1.print();
        cout << "-------------------------------" << endl;
        // for(auto e:m1)
        // {
        //     cout << e.first << endl;
        // }
    }


    //cout <<*ret << endl;

    //     for(auto e:e1)
    // {
    //     cout << e << endl;
    // }

}

//     class cm
//     {
//     public:
//         int operator()(int data)
//         {
//             return data;
//         }
//     };

// void test3()
// {
//     hashtable<int,int,cm> h1;
//     int a[] = {1,4,24,34,7,44,17,37,67,11,21,43,53,25,9999999,1111111,22,46,23};
//     for(auto e:a)
//     {
//         h1.insert(e);
//     }
//     //h1.print();
//     //hashtable<int,int,cm>::iterator it = h1.begin();
//     // while(it != h1.end())
//     // {
//     //     cout << *it << endl;
//     //     ++it;
//     // }
//     for(auto& e:h1)
//     {
//         cout << e << endl;
//     }
// }

int main()
{
    //test();

    //cout << "-----------------------------------" << endl;

    test1();
    // test3();
    return 0;
}